// 购物车状态
export default {
  namespaced: true,
  state: () => ({
    // 购物车列表数据
    list: []
  }),
  getters: {
    /**
     * 1.有效商品列表=>无效商品(没库存或下架了)
     * 2.选中的购物车商品数据
     * 3.选中商品总价
     * 4.购物车中有效商品是否全部选中状态
     * @param {*} state
     * @returns
     */
    // 有效商品列表
    validList: state => {
      return state.list.filter(item => item.isEffective)
    },
    // 有效商品列表选中商品
    validSeled: (state, getters) => {
      return getters.validList.filter(item => item.selected)
    },
    // 有效商品列表选中商品的总价
    validSeledTotal: (state, getters) => {
      return getters.validSeled.reduce((acc, good) => (acc += good.count * good.nowPrice), 0)
    },
    // 有效商品列表是否是全部选中状态
    isAll (state, getters) {
      return getters.validSeled.every(good => good.selected)
    }
  },
  mutations: {
    // 加入购物车:向list中添加商品
    /**
     *
     * @param {*} state 获取变量对象
     * @param {*} good 当前加入list商品数据
     */
    addCart (state, good) {
      /**
       * 把sku选择的商品unshift到list?
       * 不行=>排重
       * 思路:根据skuId判断是否加入过
       * 1.加入过=>累加数量
       * 2.没加入过=>unshift到list(新增)
       *
       */
      const addedIndex = state.list.findIndex(item => item.skuId === good.skuId)
      if (addedIndex > -1) {
        // 加入过
        state.list[addedIndex].count += good.count
      } else {
        // 没加过
        state.list.unshift(good)
      }
      // state.value = good
    }
  },
  actions: {
    /**
     * 加入购物车action
     * 思路:区分是否登录=>1.未登录,直接调用addCart存本地
     * 2.登录了,调用接口存到数据库
     * @param {*} param0
     * @param {*} payload
     */
    addCartAction ({ commit, rootState }, good) {
      // commit('updateValue', payload)
      console.log(rootState)
      if (rootState.user.profile.token) {
        // 已经登录(调用接口存到数据库)
      } else {
        // 没有登录
        commit('addCart', good)
        return '加入购物车成功'
      }
    }
  }
}
